import { Module, Global } from '@nestjs/common';
import { RedisModule } from './redis/redis.module';
import { AxiosModule } from './axios/axios.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { RedisClientOptions } from '@songkeys/nestjs-redis';

@Global() // 将模块标记为全局模块，使其提供的服务在整个应用程序中可用
@Module({
  imports: [
    // 异步配置 Redis 模块
    RedisModule.forRootAsync(
      {
        imports: [ConfigModule], // 导入 ConfigModule 以便在 useFactory 中使用 ConfigService
        inject: [ConfigService], // 注入 ConfigService 以获取配置
        useFactory: (config: ConfigService) => {
          return {
            closeClient: true, // 配置 Redis 客户端在应用关闭时关闭
            readyLog: true, // 启用 Redis 准备就绪日志
            errorLog: true, // 启用 Redis 错误日志
            config: config.get<RedisClientOptions>('redis'), // 从配置中获取 Redis 配置选项
          };
        },
      },
      true, // 是否全局可用
    ),
    AxiosModule, // 导入 Axios 模块，用于 HTTP 请求
  ],
})
export class CommonModule { }